Skip to content

Release v3.8.0#1997

Merged
diegosouzapw merged 56 commits into
mainfrom
release/v3.8.0
May 8, 2026
Merged

Release v3.8.0#1997
diegosouzapw merged 56 commits into
mainfrom
release/v3.8.0

Conversation

@diegosouzapw
Copy link
Copy Markdown
Owner

@diegosouzapw diegosouzapw commented May 6, 2026

[3.8.0] — 2026-05-06

✨ New Features

🐛 Bug Fixes

🔒 Security

  • fix(security): remediate regex validation backtracking path in core compression cleanup ([BUG] No password to access #1990)
  • fix(core): harden input handling and stabilization for prompt compression edge cases

🧹 Chores & Maintenance

[3.7.9] — 2026-05-03

✨ New Features

🐛 Bug Fixes

🔄 Updates

📝 Documentation

  • docs(compression): document RTK+Caveman stacked savings ranges

🏆 Release Attribution & Retroactive Credits

Tests

  • All tests pass

⚠️ After merging: run Phase 2 steps to tag, publish, and deploy.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces support for custom project IDs in the Gemini CLI transport, enabling better configuration for managed projects. It also standardizes provider icon rendering across the dashboard and CLI tool components by migrating from local image files to a centralized ProviderIcon component using SVG assets. Additionally, the project version has been bumped to 3.8.0. I have no feedback to provide.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 6, 2026

CI Coverage Report

  • Coverage job: success
  • PR test policy: success

Coverage artifact was not available for this run.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1985af8965

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

codexOpenaiStoreEnabled: connection.providerSpecificData?.openaiStoreEnabled === true,
consoleApiKey: existingConsoleApiKey,
ccCompatibleContext1m: ccRequestDefaults.context1m,
geminiProjectId: (connection.providerSpecificData?.projectId as string) || "",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Initialize Gemini project field from persisted connection projectId

The edit modal populates geminiProjectId only from providerSpecificData.projectId, but existing Gemini OAuth connections commonly store their active project in top-level connection.projectId; when users open the modal and save unrelated changes, the blank field causes updates.projectId to be written as null, silently clearing a previously valid project and breaking requests in cases where loadCodeAssist refresh is unavailable or fails.

Useful? React with 👍 / 👎.

if (credentials.accessToken) {
// Refresh the project ID via loadCodeAssist (cached for 30s) only when project not provided
// and credentials have an access token
if (!envelope.project && credentials.accessToken) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep project refresh for OAuth-backed Gemini requests

This change skips refreshProject whenever envelope.project is already non-empty, which includes stale credentials.projectId values loaded from stored OAuth state; previously the executor always refreshed via loadCodeAssist, so stale/broken stored project IDs were corrected before dispatch, but now those requests are sent with the stale project and can fail with Cloud Code permission errors.

Useful? React with 👍 / 👎.

NekoMonci12 and others added 4 commits May 6, 2026 20:14
Add Linux certificate management via update-ca-certificates for Docker support. Skip sudo password validation when running as root, matching the existing cli-tools route behavior.
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dda5269e77

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

formData.codexOpenaiStoreEnabled === true;
}
if (isGeminiCli) {
updates.providerSpecificData.projectId = formData.geminiProjectId.trim() || undefined;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Clear Gemini projectId key instead of sending undefined

When the Gemini project field is cleared, this writes undefined, and JSON.stringify omits that property from the PUT payload. The server then merges providerSpecificData with existing values, so the old providerSpecificData.projectId persists; with this commit’s executor fallback to credentials.providerSpecificData.projectId, Gemini CLI requests continue using the stale project even after users try to clear it, which can keep Cloud Code requests failing until OAuth is reconnected.

Useful? React with 👍 / 👎.

congvc and others added 11 commits May 6, 2026 22:25
- Replace || "Unknown" fallbacks with || null in usage.ts (GLM + Claude legacy)
- Add plan extraction to Claude OAuth mapTokens (account_tier > plan > subscription_type > billing.plan)
- Add unit tests for plan extraction and Provider Limits badge resolution
The original fix replaced || "Unknown" with || null for GLM and Claude
legacy (non-OAuth) paths. Per user clarification, "Unknown" is a valid
display fallback when no plan data exists — null-based fallbacks caused
the Provider Limits dashboard to show no badge rather than a clear
"Unknown" indicator.

Revert only the usage.ts changes. Claude OAuth mapTokens plan extraction
(claude.ts) and the associated tests remain unchanged.
Turbopack resolveAlias (@/mitm/manager → manager.stub.ts) was designed
for build-time safety but Next.js applies aliases to ALL imports —
including dynamic ones. This caused await import("@/mitm/manager") at
runtime to load the stub, which silently returned fake {running: true}
without spawning the MITM proxy. The UI showed "MITM proxy started"
but nothing was actually running.

Fix introduces a two-path design:
- @/mitm/manager        → stub (build-time, safe for Turbopack)
- @/mitm/manager.runtime → real manager (runtime, bypasses alias)

Route handlers now dynamic-import from manager.runtime, which
re-exports from ./manager and does NOT match the alias pattern.

Additional fixes:
- Make stub throw explicit errors at runtime so misconfiguration is
  immediately visible instead of silently faking success
- Add server.cjs to outputFileTracingIncludes (NFT trace) and Dockerfile
  COPY so the MITM server binary exists in standalone/Docker output
Integrated into release/v3.8.0
Comment thread open-sse/executors/claudeIdentity.ts Fixed

return uuidV4FromHash(
createHash("sha256")
.update("account:" + seed)
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 72d0e1ff1b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/sse/handlers/chat.ts
Comment on lines +538 to +543
sessionId: "", // safety-net redirect doesn't have session context
forceLiveComboTest: false,
forcedConnectionId: null,
allowedConnectionIds: null,
comboStepId: null,
comboExecutionKey: null,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve combo target metadata during auto-combo redirect

When resolveModelOrError() returns a combo (for example via alias-to-auto/* resolution), this redirect path drops the per-step routing context by hardcoding forcedConnectionId, allowedConnectionIds, comboStepId, and comboExecutionKey to null/empty values instead of forwarding target and the current runtime context. That lets combo steps execute on arbitrary accounts rather than their pinned connection and breaks per-step execution tracing/session-aware behavior for redirected combos.

Useful? React with 👍 / 👎.

Comment thread src/sse/handlers/chat.ts
Comment on lines +550 to +551
settings: {},
allCombos: [],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Pass real combo context when redirecting to handleComboChat

The redirect path invokes handleComboChat with settings: {} and allCombos: [] instead of the DB-backed values used in the main combo flow, so redirected combos cannot reliably resolve nested combo references or strategy config (notably context-relay/cascade behavior). This only affects requests that enter combo flow through the new redirect, which makes behavior inconsistent with direct combo requests.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 321f6070ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +330 to +333
return Response.json(
{ text: data?.data?.text || data?.text || "" },
{ headers: { "Access-Control-Allow-Origin": getCorsOrigin() } }
);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fail KIE transcription when createTask returns no task id

When the KIE createTask call succeeds at HTTP level but returns an error payload (no taskId), this branch still returns 200 with an empty text, so callers treat a failed transcription as successful output. This is a data-corruption path for any provider-side validation/runtime failure that is encoded in JSON rather than a non-2xx status.

Useful? React with 👍 / 👎.

Comment on lines +287 to +293
const urls = Array.isArray(resultJson?.resultUrls)
? (resultJson.resultUrls as string[])
: Array.isArray(resultJson?.videoUrls)
? (resultJson.videoUrls as string[])
: Array.isArray(response.resultUrls)
? (response.resultUrls as string[])
: [];
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Parse single-url KIE video results

This normalizer only accepts array fields (resultUrls/videoUrls) and drops common singleton fields like resultUrl or url. For successful KIE jobs that return a single URL, the handler emits a success response with an empty data array, which breaks clients expecting a generated video despite upstream success.

Useful? React with 👍 / 👎.

Gi99lin and others added 13 commits May 7, 2026 18:14
- Add centralized antigravityIdentity service (sessionId, machineId, requestId)
- Switch User-Agent to Electron/Chrome desktop format
- Reorder upstream URLs: sandbox first, production last
- Add runtime headers: x-client-name, x-client-version, x-machine-id, x-vscode-sessionid, x-goog-user-project
- Add 403 retry without x-goog-user-project header
- Add generation defaults (topK=40, topP=1.0, maxOutputTokens guard)
- Strip cache_control from Claude requests recursively
- Enterprise/consumer routing via userAgent field (jetski vs antigravity)
- Update envelope field order and add enabledCreditTypes
- MITM proxy: support multiple target hosts
- Version: semver comparison with pickNewestVersion(), bump fallback to 4.1.33
- Update all affected tests
Dumps outgoing headers (with masked Authorization) and envelope
structure (fieldOrder, project, requestId, userAgent, requestType,
enabledCreditTypes, sessionId, generationConfig) at debug level
for production verification of identity overhaul.
…its max_tokens

Real Antigravity client does not send maxOutputTokens when the user
hasn't specified it — the Cloud Code server decides the output limit.
OmniRoute was incorrectly injecting a capped default from model specs,
which caused thinking models to return empty content with low limits.
Integrated into release/v3.8.0
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc84e5a34a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +586 to +587
const audioRes = await fetch(audioUrl);
return audioStreamResponse(audioRes);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve upstream error when fetching KIE audio result URL

When KIE returns an audioUrl, this branch streams it with audioStreamResponse without checking audioRes.ok. If that signed URL is expired or forbidden (for example 403/404), audioStreamResponse still forces HTTP 200, so clients get a false-success response with non-audio error content and cannot reliably detect generation failure. The same pattern is repeated in pollKieAudioResult, so both immediate and polled KIE flows are affected.

Useful? React with 👍 / 👎.

diegosouzapw added 2 commits May 8, 2026 16:19
… audio transcription CORS regression

- Restored default adaptive thinking injection for non-Haiku Claude Code models when explicit client headers are omitted.
- Updated Claude OAuth unit tests to accurately account for dynamic cliUserID property injection in mapped credentials.
- Fixed module resolution regression in audio transcription handler caused by missing getCorsOrigin utility.
@diegosouzapw diegosouzapw merged commit e162db2 into main May 8, 2026
48 of 49 checks passed
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 8, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment